package p03;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

//这里提供了一个bean，用来演示bean的各个生命周期
@Slf4j
@Component("bean")
public class TestBean {
    //bean的生命周期按照下面定义顺序从上到下执行

    /**
     * 首先肯定是构造，只有对象构造出来了，才能谈依赖注入
     * 为了显眼，日志打印使用错误级别
     */
    public TestBean() {
        log.error("构造ing...");
    }

    /**
     * 进行依赖注入
     */
    @Autowired
    public void autowire(@Value("${JAVA_HOME}") String home) {
        log.error("依赖注入..." + home);
    }

    /**
     * 执行初始化方法
     */
    @PostConstruct
    public void init() {
        log.error("初始化...");
    }

    /**
     * bean销毁时调用销毁方法
     */
    @PreDestroy
    public void destroy() {
        log.error("销毁方法...");
    }
}
